lexer grammar ANTLRLexer;

options {
  language = Java;
}


@lexer::header{
  package ejercicio9;
  import java.util.ArrayList;
}

@lexer::members {
      //Lista que guarda los errores que se van produciendo durante el analisis lexico
    List<RecognitionException> errors = new ArrayList<RecognitionException>();

    //Metodo que devuelve la lista de errores que se han producido
    public List<RecognitionException> getAllErrors() {
        return errors;
    }
    
    //Metodo que comprueba si se han producido errores
    public boolean hasErrors() {
        return !errors.isEmpty();
    }

    //Metodo del analizador lexico sobrescrito para que los errores que se van
    //produciendo durante el analisis lexico en vez de mostrarse por consola
    //se guarden en la lista de errores (errors)
    @Override
    public void reportError(RecognitionException e) {
        errors.add(e);
    }
}

fragment PAR_ABI : '(';
fragment PAR_CERR : ')';
fragment SUMA : '+';
fragment RESTA : '-';
fragment AST : '*';
fragment DIV : '/';

FIN_FICH : 'EOF';
COLON : ':';
SEMICOLON : ';';
PARENTESIS : PAR_ABI | PAR_CERR;
COMILLAS : '"';
OR : '|';

BLANCO : (' '|'\t'|'\r'?'\n') {$channel=HIDDEN;};


OP_SUMA : SUMA | RESTA;
OP_MULT : AST | DIV;

fragment DIGITO : '0'..'9';
NUMERO : (DIGITO)+('.'(DIGITO)+)?;
fragment LETRA: ('A'..'Z')|('a'..'z')|'_';
IDENT : (LETRA)((DIGITO)|(LETRA))+;


